home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 2 / Gekikoh Dennoh Club Vol. 2 (Japan).7z / Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin / fsw / zm302 / zm302_s.lzh / MPSRC045.LZH / ADP_HIGH.HAS < prev    next >
Text File  |  1996-11-18  |  26KB  |  1,088 lines

  1. *=======================================================
  2. *
  3. *    ADPCM->PCM 高音程変換
  4. *
  5. *=======================================================
  6.  
  7.  
  8. * トラップ付き
  9.  
  10. AtoP_high_mac    macro        _vol
  11.  
  12.         local        EVEN1
  13.         local        ODD1
  14.         local        EVEN2
  15.         local        ODD2
  16.  
  17.         local        EVENe1
  18.         local        ODDe1
  19.         local        EVENe2
  20.         local        ODDe2
  21.  
  22.         local        EVENx1
  23.         local        ODDx1
  24.         local        EVENx2
  25.         local        ODDx2
  26.  
  27.         local        EVENxe1
  28.         local        ODDxe1
  29.         local        EVENxe2
  30.         local        ODDxe2
  31.  
  32. * 前に処理したADPCMが偶数番目の場合
  33.  
  34.         moveq.l        #MIX_SIZE-1-1,d7    * (作成16bitPCM個数/2)-1 回のループ
  35.  
  36.         move.l        CH_TPCNST(a5),d0
  37.         add.l        a0,d0
  38.         cmp.l        a3,d0
  39.         bcs        1f
  40.  
  41.         tst.b        CH_ODDEVEN(a5)        * トラップ付変換
  42.         bmi        ODD1
  43.         bra        EVEN1
  44.  
  45. 1:        tst.b        CH_ODDEVEN(a5)        * トラップ無し変換
  46.         bmi        ODDx1
  47.         bra        EVENx1
  48.  
  49.  
  50. EVEN1:        moveq.l        #0,d6
  51.         add.w        d3,d4            * PITCH_CTR += PITCH
  52.         addx.w        d2,d6
  53.         lsr.w        #1,d6
  54.         bcs        2f
  55.  
  56. @@:        cmpa.l        a3,a0            * カウンタ>=2の偶数の場合
  57.         bcs        1f
  58.         jsr        (a4)            * トラップ処理
  59. 1:        moveq.l        #0,d0            * (4)
  60.         move.b        (a0)+,d0        * (8)
  61.         add.w        d0,d0            * (4)
  62.         adda.w        d0,a2            * (8)
  63.         add.w        (a2),d1            * (8)
  64.         move.w        d1,d0            * (4)
  65.         add.w        256*2(a2),d1        * (12)
  66.         adda.w        256*2*2(a2),a2        * (16)
  67.         subq.w        #1,d6
  68.         bne        @b
  69.  
  70.         VOLUME        _vol,d0,d6
  71.         add.w        d0,(a1)+
  72.         bra        EVEN2            * 次も偶数
  73.  
  74. 2:        beq        3f
  75.  
  76. @@:        cmpa.l        a3,a0            * カウンタ>=3の奇数の場合
  77.         bcs        1f
  78.         jsr        (a4)            * トラップ処理
  79. 1:        moveq.l        #0,d0            * (4)
  80.         move.b        (a0)+,d0        * (8)
  81.         add.w        d0,d0            * (4)
  82.         adda.w        d0,a2            * (8)
  83.         add.w        (a2),d1            * (8)
  84.         add.w        256*2(a2),d1        * (12)
  85.         adda.w        256*2*2(a2),a2        * (16)
  86.         subq.w        #1,d6
  87.         bne        @b
  88.  
  89.         move.w        d1,d0
  90.         VOLUME        _vol,d0,d6
  91.         add.w        d0,(a1)+
  92.         bra        ODD2            * 次は奇数
  93.  
  94. 3:
  95.         move.w        d1,d0
  96.         VOLUME        _vol,d0,d6
  97.         add.w        d0,(a1)+
  98.         bra        ODD2            * 次は奇数
  99.  
  100.  
  101. * 前に処理したADPCMが奇数番目の場合
  102.  
  103. ODD1:        moveq.l        #0,d6
  104.         add.w        d3,d4            * PITCH_CTR += PITCH
  105.         addx.w        d2,d6
  106.         lsr.w        #1,d6
  107.         bcs        2f
  108.  
  109. @@:        cmpa.l        a3,a0            * カウンタ>=2の偶数の場合
  110.         bcs        1f
  111.         jsr        (a4)            * トラップ処理
  112. 1:        moveq.l        #0,d0            * (4)
  113.         move.b        (a0)+,d0        * (8)
  114.         add.w        d0,d0            * (4)
  115.         adda.w        d0,a2            * (8)
  116.         add.w        (a2),d1            * (8)
  117.         add.w        256*2(a2),d1        * (12)
  118.         adda.w        256*2*2(a2),a2        * (16)
  119.         subq.w        #1,d6
  120.         bne        @b
  121.  
  122.         move.w        d1,d0
  123.         VOLUME        _vol,d0,d6
  124.         add.w        d0,(a1)+
  125.         bra        ODD2            * 次も奇数
  126.  
  127.  
  128. 2:        beq        3f
  129.  
  130.         addq.w        #1,d6            * 前のが奇数番目のADPCMだから1足す
  131. @@:        cmpa.l        a3,a0            * カウンタ>=3の奇数の場合
  132.         bcs        1f
  133.         jsr        (a4)            * トラップ処理
  134. 1:        moveq.l        #0,d0            * (4)
  135.         move.b        (a0)+,d0        * (8)
  136.         add.w        d0,d0            * (4)
  137.         adda.w        d0,a2            * (8)
  138.         add.w        (a2),d1            * (8)
  139.         move.w        d1,d0            * (4)
  140.         add.w        256*2(a2),d1        * (12)
  141.         adda.w        256*2*2(a2),a2        * (16)
  142.         subq.w        #1,d6
  143.         bne        @b
  144.  
  145.         VOLUME        _vol,d0,d6
  146.         add.w        d0,(a1)+
  147.         bra        EVEN2            * 次は偶数
  148.  
  149. 3:        cmpa.l        a3,a0            * カウンタが1の場合
  150.         bcs        1f
  151.         jsr        (a4)            * トラップ処理
  152. 1:        moveq.l        #0,d0            * (4)
  153.         move.b        (a0)+,d0        * (8)
  154.         add.w        d0,d0            * (4)
  155.         adda.w        d0,a2            * (8)
  156.         add.w        (a2),d1            * (8)
  157.         move.w        d1,d0            * (4)
  158.         add.w        256*2(a2),d1        * (12)
  159.         adda.w        256*2*2(a2),a2        * (16)
  160.  
  161.         VOLUME        _vol,d0,d6
  162.         add.w        d0,(a1)+
  163. *        bra        EVEN2            * 次は偶数
  164.  
  165.  
  166. EVEN2:        moveq.l        #0,d6
  167.         add.w        d3,d4            * PITCH_CTR += PITCH
  168.         addx.w        d2,d6
  169.         lsr.w        #1,d6
  170.         bcs        2f
  171.  
  172. @@:        cmpa.l        a3,a0            * カウンタ>=2の偶数の場合
  173.         bcs        1f
  174.         jsr        (a4)            * トラップ処理
  175. 1:        moveq.l        #0,d0            * (4)
  176.         move.b        (a0)+,d0        * (8)
  177.         add.w        d0,d0            * (4)
  178.         adda.w        d0,a2            * (8)
  179.         add.w        (a2),d1            * (8)
  180.         move.w        d1,d0            * (4)
  181.         add.w        256*2(a2),d1        * (12)
  182.         adda.w        256*2*2(a2),a2        * (16)
  183.         subq.w        #1,d6
  184.         bne        @b
  185.  
  186.         VOLUME        _vol,d0,d6
  187.         add.w        d0,(a1)+
  188.         dbra        d7,EVEN1        * 次も偶数
  189.         bra        EVENe1
  190.  
  191. 2:        beq        3f
  192.  
  193. @@:        cmpa.l        a3,a0            * カウンタ>=3の奇数の場合
  194.         bcs        1f
  195.         jsr        (a4)            * トラップ処理
  196. 1:        moveq.l        #0,d0            * (4)
  197.         move.b        (a0)+,d0        * (8)
  198.         add.w        d0,d0            * (4)
  199.         adda.w        d0,a2            * (8)
  200.         add.w        (a2),d1            * (8)
  201.         add.w        256*2(a2),d1        * (12)
  202.         adda.w        256*2*2(a2),a2        * (16)
  203.         subq.w        #1,d6
  204.         bne        @b
  205.  
  206.         move.w        d1,d0
  207.         VOLUME        _vol,d0,d6
  208.         add.w        d0,(a1)+
  209.         dbra        d7,ODD1            * 次は奇数
  210.         bra        ODDe1
  211.  
  212. 3:
  213.         move.w        d1,d0
  214.         VOLUME        _vol,d0,d6
  215.         add.w        d0,(a1)+
  216.         dbra        d7,ODD1            * 次は奇数
  217.         bra        ODDe1
  218.  
  219.  
  220. * 前に処理したADPCMが奇数番目の場合
  221.  
  222. ODD2:        moveq.l        #0,d6
  223.         add.w        d3,d4            * PITCH_CTR += PITCH
  224.         addx.w        d2,d6
  225.         lsr.w        #1,d6
  226.         bcs        2f
  227.  
  228. @@:        cmpa.l        a3,a0            * カウンタ>=2の偶数の場合
  229.         bcs        1f
  230.         jsr        (a4)            * トラップ処理
  231. 1:        moveq.l        #0,d0            * (4)
  232.         move.b        (a0)+,d0        * (8)
  233.         add.w        d0,d0            * (4)
  234.         adda.w        d0,a2            * (8)
  235.         add.w        (a2),d1            * (8)
  236.         add.w        256*2(a2),d1        * (12)
  237.         adda.w        256*2*2(a2),a2        * (16)
  238.         subq.w        #1,d6
  239.         bne        @b
  240.  
  241.         move.w        d1,d0
  242.         VOLUME        _vol,d0,d6
  243.         add.w        d0,(a1)+
  244.         dbra        d7,ODD1            * 次も奇数
  245.         bra        ODDe1
  246.  
  247. 2:        beq        3f
  248.  
  249.         addq.w        #1,d6            * 前のが奇数番目のADPCMだから1足す
  250. @@:        cmpa.l        a3,a0            * カウンタ>=3の奇数の場合
  251.         bcs        1f
  252.         jsr        (a4)            * トラップ処理
  253. 1:        moveq.l        #0,d0            * (4)
  254.         move.b        (a0)+,d0        * (8)
  255.         add.w        d0,d0            * (4)
  256.         adda.w        d0,a2            * (8)
  257.         add.w        (a2),d1            * (8)
  258.         move.w        d1,d0            * (4)
  259.         add.w        256*2(a2),d1        * (12)
  260.         adda.w        256*2*2(a2),a2        * (16)
  261.         subq.w        #1,d6
  262.         bne        @b
  263.  
  264.         VOLUME        _vol,d0,d6
  265.         add.w        d0,(a1)+
  266.         dbra        d7,EVEN1        * 次は偶数
  267.         bra        EVENe1
  268.  
  269. 3:        cmpa.l        a3,a0            * カウンタが1の場合
  270.         bcs        1f
  271.         jsr        (a4)            * トラップ処理
  272. 1:        moveq.l        #0,d0            * (4)
  273.         move.b        (a0)+,d0        * (8)
  274.         add.w        d0,d0            * (4)
  275.         adda.w        d0,a2            * (8)
  276.         add.w        (a2),d1            * (8)
  277.         move.w        d1,d0            * (4)
  278.         add.w        256*2(a2),d1        * (12)
  279.         adda.w        256*2*2(a2),a2        * (16)
  280.  
  281.         VOLUME        _vol,d0,d6
  282.         add.w        d0,(a1)+
  283.         dbra        d7,EVEN1            * 次は偶数
  284. *        bra        EVENe1
  285.  
  286. *最後の2PCM分の展開
  287. * 前に処理したADPCMが偶数番目の場合
  288.  
  289. EVENe1:        moveq.l        #0,d6
  290.         add.w        d3,d4            * PITCH_CTR += PITCH
  291.         addx.w        d2,d6
  292.         lsr.w        #1,d6
  293.         bcs        2f
  294.  
  295. @@:        cmpa.l        a3,a0            * カウンタ>=2の偶数の場合
  296.         bcs        1f
  297.         jsr        (a4)            * トラップ処理
  298. 1:        moveq.l        #0,d0            * (4)
  299.         move.b        (a0)+,d0        * (8)
  300.         add.w        d0,d0            * (4)
  301.         adda.w        d0,a2            * (8)
  302.         add.w        (a2),d1            * (8)
  303.         move.w        d1,d0            * (4)
  304.         add.w        256*2(a2),d1        * (12)
  305.         adda.w        256*2*2(a2),a2        * (16)
  306.         subq.w        #1,d6
  307.         bne        @b
  308.  
  309.         VOLUME        _vol,d0,d6
  310.         add.w        d0,(a1)+
  311.         bra        EVENe2            * 次も偶数
  312.  
  313. 2:        beq        3f
  314.  
  315. @@:        cmpa.l        a3,a0            * カウンタ>=3の奇数の場合
  316.         bcs        1f
  317.         jsr        (a4)            * トラップ処理
  318. 1:        moveq.l        #0,d0            * (4)
  319.         move.b        (a0)+,d0        * (8)
  320.         add.w        d0,d0            * (4)
  321.         adda.w        d0,a2            * (8)
  322.         add.w        (a2),d1            * (8)
  323.         add.w        256*2(a2),d1        * (12)
  324.         adda.w        256*2*2(a2),a2        * (16)
  325.         subq.w        #1,d6
  326.         bne        @b
  327.  
  328.         move.w        d1,d0
  329.         VOLUME        _vol,d0,d6
  330.         add.w        d0,(a1)+
  331.         bra        ODDe2            * 次は奇数
  332.  
  333. 3:
  334.         move.w        d1,d0
  335.         VOLUME        _vol,d0,d6
  336.         add.w        d0,(a1)+
  337.         bra        ODDe2            * 次は奇数
  338.  
  339.  
  340. * 前に処理したADPCMが奇数番目の場合
  341.  
  342. ODDe1:        moveq.l        #0,d6
  343.         add.w        d3,d4            * PITCH_CTR += PITCH
  344.         addx.w        d2,d6
  345.         lsr.w        #1,d6
  346.         bcs        2f
  347.  
  348. @@:        cmpa.l        a3,a0            * カウンタ>=2の偶数の場合
  349.         bcs        1f
  350.         jsr        (a4)            * トラップ処理
  351. 1:        moveq.l        #0,d0            * (4)
  352.         move.b        (a0)+,d0        * (8)
  353.         add.w        d0,d0            * (4)
  354.         adda.w        d0,a2            * (8)
  355.         add.w        (a2),d1            * (8)
  356.         add.w        256*2(a2),d1        * (12)
  357.         adda.w        256*2*2(a2),a2        * (16)
  358.         subq.w        #1,d6
  359.         bne        @b
  360.  
  361.         move.w        d1,d0
  362.         VOLUME        _vol,d0,d6
  363.         add.w        d0,(a1)+
  364.         bra        ODDe2            * 次も奇数
  365.  
  366.  
  367. 2:        beq        3f
  368.  
  369.         addq.w        #1,d6            * 前のが奇数番目のADPCMだから1足す
  370. @@:        cmpa.l        a3,a0            * カウンタ>=3の奇数の場合
  371.         bcs        1f
  372.         jsr        (a4)            * トラップ処理
  373. 1:        moveq.l        #0,d0            * (4)
  374.         move.b        (a0)+,d0        * (8)
  375.         add.w        d0,d0            * (4)
  376.         adda.w        d0,a2            * (8)
  377.         add.w        (a2),d1            * (8)
  378.         move.w        d1,d0            * (4)
  379.         add.w        256*2(a2),d1        * (12)
  380.         adda.w        256*2*2(a2),a2        * (16)
  381.         subq.w        #1,d6
  382.         bne        @b
  383.  
  384.         VOLUME        _vol,d0,d6
  385.         add.w        d0,(a1)+
  386.         bra        EVENe2            * 次は偶数
  387.  
  388. 3:        cmpa.l        a3,a0            * カウンタが1の場合
  389.         bcs        1f
  390.         jsr        (a4)            * トラップ処理
  391. 1:        moveq.l        #0,d0            * (4)
  392.         move.b        (a0)+,d0        * (8)
  393.         add.w        d0,d0            * (4)
  394.         adda.w        d0,a2            * (8)
  395.         add.w        (a2),d1            * (8)
  396.         move.w        d1,d0            * (4)
  397.         add.w        256*2(a2),d1        * (12)
  398.         adda.w        256*2*2(a2),a2        * (16)
  399.  
  400.         VOLUME        _vol,d0,d6
  401.         add.w        d0,(a1)+
  402. *        bra        EVENe2            * 次は偶数
  403.  
  404.  
  405. EVENe2:        moveq.l        #0,d6
  406.         add.w        d3,d4            * PITCH_CTR += PITCH
  407.         addx.w        d2,d6
  408.         lsr.w        #1,d6
  409.         bcs        2f
  410.  
  411. @@:        cmpa.l        a3,a0            * カウンタ>=2の偶数の場合
  412.         bcs        1f
  413.         jsr        (a4)            * トラップ処理
  414. 1:        moveq.l        #0,d0            * (4)
  415.         move.b        (a0)+,d0        * (8)
  416.         add.w        d0,d0            * (4)
  417.         adda.w        d0,a2            * (8)
  418.         add.w        (a2),d1            * (8)
  419.         move.w        d1,d0            * (4)
  420.         add.w        256*2(a2),d1        * (12)
  421.         adda.w        256*2*2(a2),a2        * (16)
  422.         subq.w        #1,d6
  423.         bne        @b
  424.  
  425.         move.w        d0,CH_LAST_PCM(a5)    * 前回変換終了時のPCM値 = d0.w
  426.         move.w        d1,CH_AtoP_Y(a5)    * PCM予測値 = d1.w
  427.         move.b        #1,CH_ODDEVEN(a5)    * ODD/EVEN FLAG = EVEN
  428.         move.w        d4,CH_PITCH_CTR(a5)    * ピッチカウンタの下位16bit = d4.w
  429.         move.l        a0,CH_PCM_ADR(a5)    * ADPCMアドレス = a0.l
  430.         move.l        a2,CH_AtoP_X(a5)    * ADPCM->PCM変換テーブルアドレス = a2.l
  431.         VOLUME        _vol,d0,d6
  432.         move.w        d0,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  433.         add.w        d0,(a1)+
  434.         rts
  435.  
  436. 2:        beq        3f
  437.  
  438. @@:        cmpa.l        a3,a0            * カウンタ>=3の奇数の場合
  439.         bcs        1f
  440.         jsr        (a4)            * トラップ処理
  441. 1:        moveq.l        #0,d0            * (4)
  442.         move.b        (a0)+,d0        * (8)
  443.         add.w        d0,d0            * (4)
  444.         adda.w        d0,a2            * (8)
  445.         add.w        (a2),d1            * (8)
  446.         add.w        256*2(a2),d1        * (12)
  447.         adda.w        256*2*2(a2),a2        * (16)
  448.         subq.w        #1,d6
  449.         bne        @b
  450.  
  451.         move.w        d1,CH_LAST_PCM(a5)    * 前回変換終了時のPCM値 = d1.w
  452.         move.w        d1,CH_AtoP_Y(a5)    * PCM予測値 = d1.w
  453.         st.b        CH_ODDEVEN(a5)        * ODD/EVEN FLAG = ODD
  454.         move.w        d4,CH_PITCH_CTR(a5)    * ピッチカウンタの下位16bit = d4.w
  455.         move.l        a0,CH_PCM_ADR(a5)    * ADPCMアドレス = a0.l
  456.         move.l        a2,CH_AtoP_X(a5)    * ADPCM->PCM変換テーブルアドレス = a2.l
  457.         VOLUME        _vol,d1,d6
  458.         move.w        d1,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  459.         add.w        d1,(a1)+
  460.         rts
  461.  
  462. 3:        move.w        d1,CH_LAST_PCM(a5)    * 前回変換終了時のPCM値 = d1.w
  463.         move.w        d1,CH_AtoP_Y(a5)    * PCM予測値 = d1.w
  464.         st.b        CH_ODDEVEN(a5)        * ODD/EVEN FLAG = ODD
  465.         move.w        d4,CH_PITCH_CTR(a5)    * ピッチカウンタの下位16bit = d4.w
  466.         move.l        a0,CH_PCM_ADR(a5)    * ADPCMアドレス = a0.l
  467.         move.l        a2,CH_AtoP_X(a5)    * ADPCM->PCM変換テーブルアドレス = a2.l
  468.         VOLUME        _vol,d1,d6
  469.         move.w        d1,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  470.         add.w        d1,(a1)+
  471.         rts
  472.  
  473.  
  474. * 前に処理したADPCMが奇数番目の場合
  475.  
  476. ODDe2:        moveq.l        #0,d6
  477.         add.w        d3,d4            * PITCH_CTR += PITCH
  478.         addx.w        d2,d6
  479.         lsr.w        #1,d6
  480.         bcs        2f
  481.  
  482. @@:        cmpa.l        a3,a0            * カウンタ>=2の偶数の場合
  483.         bcs        1f
  484.         jsr        (a4)            * トラップ処理
  485. 1:        moveq.l        #0,d0            * (4)
  486.         move.b        (a0)+,d0        * (8)
  487.         add.w        d0,d0            * (4)
  488.         adda.w        d0,a2            * (8)
  489.         add.w        (a2),d1            * (8)
  490.         add.w        256*2(a2),d1        * (12)
  491.         adda.w        256*2*2(a2),a2        * (16)
  492.         subq.w        #1,d6
  493.         bne        @b
  494.  
  495.         move.w        d1,CH_LAST_PCM(a5)    * 前回変換終了時のPCM値 = d1.w
  496.         move.w        d1,CH_AtoP_Y(a5)    * PCM予測値 = d1.w
  497.         st.b        CH_ODDEVEN(a5)        * ODD/EVEN FLAG = ODD
  498.         move.w        d4,CH_PITCH_CTR(a5)    * ピッチカウンタの下位16bit = d4.w
  499.         move.l        a0,CH_PCM_ADR(a5)    * ADPCMアドレス = a0.l
  500.         move.l        a2,CH_AtoP_X(a5)    * ADPCM->PCM変換テーブルアドレス = a2.l
  501.         VOLUME        _vol,d1,d6
  502.         move.w        d1,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  503.         add.w        d1,(a1)+
  504.         rts
  505.  
  506. 2:        beq        3f
  507.  
  508.         addq.w        #1,d6            * 前のが奇数番目のADPCMだから1足す
  509. @@:        cmpa.l        a3,a0            * カウンタ>=3の奇数の場合
  510.         bcs        1f
  511.         jsr        (a4)            * トラップ処理
  512. 1:        moveq.l        #0,d0            * (4)
  513.         move.b        (a0)+,d0        * (8)
  514.         add.w        d0,d0            * (4)
  515.         adda.w        d0,a2            * (8)
  516.         add.w        (a2),d1            * (8)
  517.         move.w        d1,d0            * (4)
  518.         add.w        256*2(a2),d1        * (12)
  519.         adda.w        256*2*2(a2),a2        * (16)
  520.         subq.w        #1,d6
  521.         bne        @b
  522.  
  523.         move.w        d0,CH_LAST_PCM(a5)    * 前回変換終了時のPCM値 = d0.w
  524.         move.w        d1,CH_AtoP_Y(a5)    * PCM予測値 = d1.w
  525.         move.b        #1,CH_ODDEVEN(a5)    * ODD/EVEN FLAG = EVEN
  526.         move.w        d4,CH_PITCH_CTR(a5)    * ピッチカウンタの下位16bit = d4.w
  527.         move.l        a0,CH_PCM_ADR(a5)    * ADPCMアドレス = a0.l
  528.         move.l        a2,CH_AtoP_X(a5)    * ADPCM->PCM変換テーブルアドレス = a2.l
  529.         VOLUME        _vol,d0,d6
  530.         move.w        d0,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  531.         add.w        d0,(a1)+
  532.         rts
  533.  
  534. 3:        cmpa.l        a3,a0            * カウンタが1の場合
  535.         bcs        1f
  536.         jsr        (a4)            * トラップ処理
  537. 1:        moveq.l        #0,d0            * (4)
  538.         move.b        (a0)+,d0        * (8)
  539.         add.w        d0,d0            * (4)
  540.         adda.w        d0,a2            * (8)
  541.         add.w        (a2),d1            * (8)
  542.         move.w        d1,d0            * (4)
  543.         add.w        256*2(a2),d1        * (12)
  544.         adda.w        256*2*2(a2),a2        * (16)
  545.  
  546.         move.w        d0,CH_LAST_PCM(a5)    * 前回変換終了時のPCM値 = d0.w
  547.         move.w        d1,CH_AtoP_Y(a5)    * PCM予測値 = d1.w
  548.         move.b        #1,CH_ODDEVEN(a5)    * ODD/EVEN FLAG = EVEN
  549.         move.w        d4,CH_PITCH_CTR(a5)    * ピッチカウンタの下位16bit = d4.w
  550.         move.l        a0,CH_PCM_ADR(a5)    * ADPCMアドレス = a0.l
  551.         move.l        a2,CH_AtoP_X(a5)    * ADPCM->PCM変換テーブルアドレス = a2.l
  552.         VOLUME        _vol,d0,d7
  553.         move.w        d0,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  554.         add.w        d0,(a1)+
  555.         rts
  556.  
  557.  
  558.  
  559. * トラップ無し
  560. * 前に処理したADPCMが偶数番目の場合
  561.  
  562.  
  563. EVENx1:        moveq.l        #0,d6
  564.         add.w        d3,d4            * PITCH_CTR += PITCH
  565.         addx.w        d2,d6
  566.         lsr.w        #1,d6
  567.         bcs        2f
  568.  
  569. @@:        moveq.l        #0,d0            * (4)
  570.         move.b        (a0)+,d0        * (8)
  571.         add.w        d0,d0            * (4)
  572.         adda.w        d0,a2            * (8)
  573.         add.w        (a2),d1            * (8)
  574.         move.w        d1,d0            * (4)
  575.         add.w        256*2(a2),d1        * (12)
  576.         adda.w        256*2*2(a2),a2        * (16)
  577.         subq.w        #1,d6
  578.         bne        @b
  579.  
  580.         VOLUME        _vol,d0,d6
  581.         add.w        d0,(a1)+
  582.         bra        EVENx2            * 次も偶数
  583.  
  584. 2:        beq        3f
  585.  
  586. @@:        moveq.l        #0,d0            * (4)
  587.         move.b        (a0)+,d0        * (8)
  588.         add.w        d0,d0            * (4)
  589.         adda.w        d0,a2            * (8)
  590.         add.w        (a2),d1            * (8)
  591.         add.w        256*2(a2),d1        * (12)
  592.         adda.w        256*2*2(a2),a2        * (16)
  593.         subq.w        #1,d6
  594.         bne        @b
  595.  
  596.         move.w        d1,d0
  597.         VOLUME        _vol,d0,d6
  598.         add.w        d0,(a1)+
  599.         bra        ODDx2            * 次は奇数
  600.  
  601. 3:        move.w        d1,d0
  602.         VOLUME        _vol,d0,d6
  603.         add.w        d0,(a1)+
  604.         bra        ODDx2            * 次は奇数
  605.  
  606.  
  607. * 前に処理したADPCMが奇数番目の場合
  608.  
  609. ODDx1:        moveq.l        #0,d6
  610.         add.w        d3,d4            * PITCH_CTR += PITCH
  611.         addx.w        d2,d6
  612.         lsr.w        #1,d6
  613.         bcs        2f
  614.  
  615. @@:        moveq.l        #0,d0            * (4)
  616.         move.b        (a0)+,d0        * (8)
  617.         add.w        d0,d0            * (4)
  618.         adda.w        d0,a2            * (8)
  619.         add.w        (a2),d1            * (8)
  620.         add.w        256*2(a2),d1        * (12)
  621.         adda.w        256*2*2(a2),a2        * (16)
  622.         subq.w        #1,d6
  623.         bne        @b
  624.  
  625.         move.w        d1,d0
  626.         VOLUME        _vol,d0,d6
  627.         add.w        d0,(a1)+
  628.         bra        ODDx2            * 次も奇数
  629.  
  630.  
  631. 2:        beq        3f
  632.  
  633.         addq.w        #1,d6            * 前のが奇数番目のADPCMだから1足す
  634. @@:        moveq.l        #0,d0            * (4)
  635.         move.b        (a0)+,d0        * (8)
  636.         add.w        d0,d0            * (4)
  637.         adda.w        d0,a2            * (8)
  638.         add.w        (a2),d1            * (8)
  639.         move.w        d1,d0            * (4)
  640.         add.w        256*2(a2),d1        * (12)
  641.         adda.w        256*2*2(a2),a2        * (16)
  642.         subq.w        #1,d6
  643.         bne        @b
  644.  
  645.         VOLUME        _vol,d0,d6
  646.         add.w        d0,(a1)+
  647.         bra        EVENx2            * 次は偶数
  648.  
  649. 3:        moveq.l        #0,d0            * (4)
  650.         move.b        (a0)+,d0        * (8)
  651.         add.w        d0,d0            * (4)
  652.         adda.w        d0,a2            * (8)
  653.         add.w        (a2),d1            * (8)
  654.         move.w        d1,d0            * (4)
  655.         add.w        256*2(a2),d1        * (12)
  656.         adda.w        256*2*2(a2),a2        * (16)
  657.  
  658.         VOLUME        _vol,d0,d6
  659.         add.w        d0,(a1)+
  660. *        bra        EVENx2            * 次は偶数
  661.  
  662.  
  663. EVENx2:        moveq.l        #0,d6
  664.         add.w        d3,d4            * PITCH_CTR += PITCH
  665.         addx.w        d2,d6
  666.         lsr.w        #1,d6
  667.         bcs        2f
  668.  
  669. @@:        moveq.l        #0,d0            * (4)
  670.         move.b        (a0)+,d0        * (8)
  671.         add.w        d0,d0            * (4)
  672.         adda.w        d0,a2            * (8)
  673.         add.w        (a2),d1            * (8)
  674.         move.w        d1,d0            * (4)
  675.         add.w        256*2(a2),d1        * (12)
  676.         adda.w        256*2*2(a2),a2        * (16)
  677.         subq.w        #1,d6
  678.         bne        @b
  679.  
  680.         VOLUME        _vol,d0,d6
  681.         add.w        d0,(a1)+
  682.         dbra        d7,EVENx1        * 次も偶数
  683.         bra        EVENxe1
  684.  
  685. 2:        beq        3f
  686.  
  687. @@:        moveq.l        #0,d0            * (4)
  688.         move.b        (a0)+,d0        * (8)
  689.         add.w        d0,d0            * (4)
  690.         adda.w        d0,a2            * (8)
  691.         add.w        (a2),d1            * (8)
  692.         add.w        256*2(a2),d1        * (12)
  693.         adda.w        256*2*2(a2),a2        * (16)
  694.         subq.w        #1,d6
  695.         bne        @b
  696.  
  697.         move.w        d1,d0
  698.         VOLUME        _vol,d0,d6
  699.         add.w        d0,(a1)+
  700.         dbra        d7,ODDx1        * 次は奇数
  701.         bra        ODDxe1
  702.  
  703. 3:        move.w        d1,d0
  704.         VOLUME        _vol,d0,d6
  705.         add.w        d0,(a1)+
  706.         dbra        d7,ODDx1        * 次は奇数
  707.         bra        ODDxe1
  708.  
  709.  
  710. * 前に処理したADPCMが奇数番目の場合
  711.  
  712. ODDx2:        moveq.l        #0,d6
  713.         add.w        d3,d4            * PITCH_CTR += PITCH
  714.         addx.w        d2,d6
  715.         lsr.w        #1,d6
  716.         bcs        2f
  717.  
  718. @@:        moveq.l        #0,d0            * (4)
  719.         move.b        (a0)+,d0        * (8)
  720.         add.w        d0,d0            * (4)
  721.         adda.w        d0,a2            * (8)
  722.         add.w        (a2),d1            * (8)
  723.         add.w        256*2(a2),d1        * (12)
  724.         adda.w        256*2*2(a2),a2        * (16)
  725.         subq.w        #1,d6
  726.         bne        @b
  727.  
  728.         move.w        d1,d0
  729.         VOLUME        _vol,d0,d6
  730.         add.w        d0,(a1)+
  731.         dbra        d7,ODDx1        * 次も奇数
  732.         bra        ODDxe1
  733.  
  734. 2:        beq        3f
  735.  
  736.         addq.w        #1,d6            * 前のが奇数番目のADPCMだから1足す
  737. @@:        moveq.l        #0,d0            * (4)
  738.         move.b        (a0)+,d0        * (8)
  739.         add.w        d0,d0            * (4)
  740.         adda.w        d0,a2            * (8)
  741.         add.w        (a2),d1            * (8)
  742.         move.w        d1,d0            * (4)
  743.         add.w        256*2(a2),d1        * (12)
  744.         adda.w        256*2*2(a2),a2        * (16)
  745.         subq.w        #1,d6
  746.         bne        @b
  747.  
  748.         VOLUME        _vol,d0,d6
  749.         add.w        d0,(a1)+
  750.         dbra        d7,EVENx1        * 次は偶数
  751.         bra        EVENxe1
  752.  
  753. 3:        moveq.l        #0,d0            * (4)
  754.         move.b        (a0)+,d0        * (8)
  755.         add.w        d0,d0            * (4)
  756.         adda.w        d0,a2            * (8)
  757.         add.w        (a2),d1            * (8)
  758.         move.w        d1,d0            * (4)
  759.         add.w        256*2(a2),d1        * (12)
  760.         adda.w        256*2*2(a2),a2        * (16)
  761.  
  762.         VOLUME        _vol,d0,d6
  763.         add.w        d0,(a1)+
  764.         dbra        d7,EVENx1        * 次は偶数
  765.         bra        ODDxe1
  766.  
  767. EVENxe1:    moveq.l        #0,d6
  768.         add.w        d3,d4            * PITCH_CTR += PITCH
  769.         addx.w        d2,d6
  770.         lsr.w        #1,d6
  771.         bcs        2f
  772.  
  773. @@:        moveq.l        #0,d0            * (4)
  774.         move.b        (a0)+,d0        * (8)
  775.         add.w        d0,d0            * (4)
  776.         adda.w        d0,a2            * (8)
  777.         add.w        (a2),d1            * (8)
  778.         move.w        d1,d0            * (4)
  779.         add.w        256*2(a2),d1        * (12)
  780.         adda.w        256*2*2(a2),a2        * (16)
  781.         subq.w        #1,d6
  782.         bne        @b
  783.  
  784.         VOLUME        _vol,d0,d6
  785.         add.w        d0,(a1)+
  786.         bra        EVENxe2            * 次も偶数
  787.  
  788. 2:        beq        3f
  789.  
  790. @@:        moveq.l        #0,d0            * (4)
  791.         move.b        (a0)+,d0        * (8)
  792.         add.w        d0,d0            * (4)
  793.         adda.w        d0,a2            * (8)
  794.         add.w        (a2),d1            * (8)
  795.         add.w        256*2(a2),d1        * (12)
  796.         adda.w        256*2*2(a2),a2        * (16)
  797.         subq.w        #1,d6
  798.         bne        @b
  799.  
  800.         move.w        d1,d0
  801.         VOLUME        _vol,d0,d6
  802.         add.w        d0,(a1)+
  803.         bra        ODDxe2            * 次は奇数
  804.  
  805. 3:        move.w        d1,d0
  806.         VOLUME        _vol,d0,d6
  807.         add.w        d0,(a1)+
  808.         bra        ODDxe2            * 次は奇数
  809.  
  810.  
  811. * 前に処理したADPCMが奇数番目の場合
  812.  
  813. ODDxe1:        moveq.l        #0,d6
  814.         add.w        d3,d4            * PITCH_CTR += PITCH
  815.         addx.w        d2,d6
  816.         lsr.w        #1,d6
  817.         bcs        2f
  818.  
  819. @@:        moveq.l        #0,d0            * (4)
  820.         move.b        (a0)+,d0        * (8)
  821.         add.w        d0,d0            * (4)
  822.         adda.w        d0,a2            * (8)
  823.         add.w        (a2),d1            * (8)
  824.         add.w        256*2(a2),d1        * (12)
  825.         adda.w        256*2*2(a2),a2        * (16)
  826.         subq.w        #1,d6
  827.         bne        @b
  828.  
  829.         move.w        d1,d0
  830.         VOLUME        _vol,d0,d6
  831.         add.w        d0,(a1)+
  832.         bra        ODDxe2            * 次も奇数
  833.  
  834.  
  835. 2:        beq        3f
  836.  
  837.         addq.w        #1,d6            * 前のが奇数番目のADPCMだから1足す
  838. @@:        moveq.l        #0,d0            * (4)
  839.         move.b        (a0)+,d0        * (8)
  840.         add.w        d0,d0            * (4)
  841.         adda.w        d0,a2            * (8)
  842.         add.w        (a2),d1            * (8)
  843.         move.w        d1,d0            * (4)
  844.         add.w        256*2(a2),d1        * (12)
  845.         adda.w        256*2*2(a2),a2        * (16)
  846.         subq.w        #1,d6
  847.         bne        @b
  848.  
  849.         VOLUME        _vol,d0,d6
  850.         add.w        d0,(a1)+
  851.         bra        EVENxe2            * 次は偶数
  852.  
  853. 3:        moveq.l        #0,d0            * (4)
  854.         move.b        (a0)+,d0        * (8)
  855.         add.w        d0,d0            * (4)
  856.         adda.w        d0,a2            * (8)
  857.         add.w        (a2),d1            * (8)
  858.         move.w        d1,d0            * (4)
  859.         add.w        256*2(a2),d1        * (12)
  860.         adda.w        256*2*2(a2),a2        * (16)
  861.  
  862.         VOLUME        _vol,d0,d6
  863.         add.w        d0,(a1)+
  864. *        bra        EVENxe2            * 次は偶数
  865.  
  866.  
  867. EVENxe2:    moveq.l        #0,d6
  868.         add.w        d3,d4            * PITCH_CTR += PITCH
  869.         addx.w        d2,d6
  870.         lsr.w        #1,d6
  871.         bcs        2f
  872.  
  873. @@:        moveq.l        #0,d0            * (4)
  874.         move.b        (a0)+,d0        * (8)
  875.         add.w        d0,d0            * (4)
  876.         adda.w        d0,a2            * (8)
  877.         add.w        (a2),d1            * (8)
  878.         move.w        d1,d0            * (4)
  879.         add.w        256*2(a2),d1        * (12)
  880.         adda.w        256*2*2(a2),a2        * (16)
  881.         subq.w        #1,d6
  882.         bne        @b
  883.  
  884.         move.w        d0,CH_LAST_PCM(a5)    * 前回変換終了時のPCM値 = d0.w
  885.         move.w        d1,CH_AtoP_Y(a5)    * PCM予測値 = d1.w
  886.         move.b        #1,CH_ODDEVEN(a5)    * ODD/EVEN FLAG = EVEN
  887.         move.w        d4,CH_PITCH_CTR(a5)    * ピッチカウンタの下位16bit = d4.w
  888.         move.l        a0,CH_PCM_ADR(a5)    * ADPCMアドレス = a0.l
  889.         move.l        a2,CH_AtoP_X(a5)    * ADPCM->PCM変換テーブルアドレス = a2.l
  890.         VOLUME        _vol,d0,d6
  891.         move.w        d0,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  892.         add.w        d0,(a1)+
  893.         rts
  894.  
  895. 2:        beq        3f
  896.  
  897. @@:        moveq.l        #0,d0            * (4)
  898.         move.b        (a0)+,d0        * (8)
  899.         add.w        d0,d0            * (4)
  900.         adda.w        d0,a2            * (8)
  901.         add.w        (a2),d1            * (8)
  902.         add.w        256*2(a2),d1        * (12)
  903.         adda.w        256*2*2(a2),a2        * (16)
  904.         subq.w        #1,d6
  905.         bne        @b
  906.  
  907.         move.w        d1,CH_LAST_PCM(a5)    * 前回変換終了時のPCM値 = d1.w
  908.         move.w        d1,CH_AtoP_Y(a5)    * PCM予測値 = d1.w
  909.         st.b        CH_ODDEVEN(a5)        * ODD/EVEN FLAG = ODD
  910.         move.w        d4,CH_PITCH_CTR(a5)    * ピッチカウンタの下位16bit = d4.w
  911.         move.l        a0,CH_PCM_ADR(a5)    * ADPCMアドレス = a0.l
  912.         move.l        a2,CH_AtoP_X(a5)    * ADPCM->PCM変換テーブルアドレス = a2.l
  913.         VOLUME        _vol,d1,d6
  914.         move.w        d1,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  915.         add.w        d1,(a1)+
  916.         rts
  917.  
  918. 3:        move.w        d1,CH_LAST_PCM(a5)    * 前回変換終了時のPCM値 = d1.w
  919.         move.w        d1,CH_AtoP_Y(a5)    * PCM予測値 = d1.w
  920.         st.b        CH_ODDEVEN(a5)        * ODD/EVEN FLAG = ODD
  921.         move.w        d4,CH_PITCH_CTR(a5)    * ピッチカウンタの下位16bit = d4.w
  922.         move.l        a0,CH_PCM_ADR(a5)    * ADPCMアドレス = a0.l
  923.         move.l        a2,CH_AtoP_X(a5)    * ADPCM->PCM変換テーブルアドレス = a2.l
  924.         VOLUME        _vol,d1,d6
  925.         move.w        d1,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  926.         add.w        d1,(a1)+
  927.         rts
  928.  
  929.  
  930. * 前に処理したADPCMが奇数番目の場合
  931.  
  932. ODDxe2:        moveq.l        #0,d6
  933.         add.w        d3,d4            * PITCH_CTR += PITCH
  934.         addx.w        d2,d6
  935.         lsr.w        #1,d6
  936.         bcs        2f
  937.  
  938. @@:        moveq.l        #0,d0            * (4)
  939.         move.b        (a0)+,d0        * (8)
  940.         add.w        d0,d0            * (4)
  941.         adda.w        d0,a2            * (8)
  942.         add.w        (a2),d1            * (8)
  943.         add.w        256*2(a2),d1        * (12)
  944.         adda.w        256*2*2(a2),a2        * (16)
  945.         subq.w        #1,d6
  946.         bne        @b
  947.  
  948.         move.w        d1,CH_LAST_PCM(a5)    * 前回変換終了時のPCM値 = d1.w
  949.         move.w        d1,CH_AtoP_Y(a5)    * PCM予測値 = d1.w
  950.         st.b        CH_ODDEVEN(a5)        * ODD/EVEN FLAG = ODD
  951.         move.w        d4,CH_PITCH_CTR(a5)    * ピッチカウンタの下位16bit = d4.w
  952.         move.l        a0,CH_PCM_ADR(a5)    * ADPCMアドレス = a0.l
  953.         move.l        a2,CH_AtoP_X(a5)    * ADPCM->PCM変換テーブルアドレス = a2.l
  954.         VOLUME        _vol,d1,d6
  955.         move.w        d1,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  956.         add.w        d1,(a1)+
  957.         rts
  958.  
  959. 2:        beq        3f
  960.  
  961.         addq.w        #1,d6            * 前のが奇数番目のADPCMだから1足す
  962. @@:        moveq.l        #0,d0            * (4)
  963.         move.b        (a0)+,d0        * (8)
  964.         add.w        d0,d0            * (4)
  965.         adda.w        d0,a2            * (8)
  966.         add.w        (a2),d1            * (8)
  967.         move.w        d1,d0            * (4)
  968.         add.w        256*2(a2),d1        * (12)
  969.         adda.w        256*2*2(a2),a2        * (16)
  970.         subq.w        #1,d6
  971.         bne        @b
  972.  
  973.         move.w        d0,CH_LAST_PCM(a5)    * 前回変換終了時のPCM値 = d0.w
  974.         move.w        d1,CH_AtoP_Y(a5)    * PCM予測値 = d1.w
  975.         move.b        #1,CH_ODDEVEN(a5)    * ODD/EVEN FLAG = EVEN
  976.         move.w        d4,CH_PITCH_CTR(a5)    * ピッチカウンタの下位16bit = d4.w
  977.         move.l        a0,CH_PCM_ADR(a5)    * ADPCMアドレス = a0.l
  978.         move.l        a2,CH_AtoP_X(a5)    * ADPCM->PCM変換テーブルアドレス = a2.l
  979.         VOLUME        _vol,d0,d6
  980.         move.w        d0,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  981.         add.w        d0,(a1)+
  982.         rts
  983.  
  984. 3:        moveq.l        #0,d0            * (4)
  985.         move.b        (a0)+,d0        * (8)
  986.         add.w        d0,d0            * (4)
  987.         adda.w        d0,a2            * (8)
  988.         add.w        (a2),d1            * (8)
  989.         move.w        d1,d0            * (4)
  990.         add.w        256*2(a2),d1        * (12)
  991.         adda.w        256*2*2(a2),a2        * (16)
  992.  
  993.         move.w        d0,CH_LAST_PCM(a5)    * 前回変換終了時のPCM値 = d0.w
  994.         move.w        d1,CH_AtoP_Y(a5)    * PCM予測値 = d1.w
  995.         move.b        #1,CH_ODDEVEN(a5)    * ODD/EVEN FLAG = EVEN
  996.         move.w        d4,CH_PITCH_CTR(a5)    * ピッチカウンタの下位16bit = d4.w
  997.         move.l        a0,CH_PCM_ADR(a5)    * ADPCMアドレス = a0.l
  998.         move.l        a2,CH_AtoP_X(a5)    * ADPCM->PCM変換テーブルアドレス = a2.l
  999.         VOLUME        _vol,d0,d6
  1000.         move.w        d0,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  1001.         add.w        d0,(a1)+
  1002.         rts
  1003.  
  1004.         endm
  1005.  
  1006.  
  1007. *=======================================================
  1008.  
  1009. AtoP_high:
  1010.         move.w        CH_PITCH(a5),d2        * 音程ピッチ上位16bit
  1011.         move.w        CH_PITCH+2(a5),d3    * 音程ピッチ下位16bit
  1012.         move.w        CH_VOL(a5),d5        * d5.w = ADPCM VOLUME
  1013.  
  1014.         tst.b        CH_KEY_STAT(a5)        * keyon=$01 keyoff=$80 non=$00
  1015.         bmi        AtoP_high_keyoff
  1016.         bne        AtoP_high_keyon
  1017.  
  1018. *        通常の処理
  1019.         move.w        CH_AtoP_Y(a5),d1    * d1.w = PCM予測値
  1020.         move.w        CH_PITCH_CTR(a5),d4    * d4.w = 音程カウンタ下位16bit
  1021.         moveq.l        #0,d6            * d6.w = 音程カウンタ上位16bit
  1022.         movea.l        CH_PCM_ADR(a5),a0    * a0.l = ADPCMアドレス
  1023.         movea.l        CH_AtoP_X(a5),a2    * a2.l = ADPCM->PCM変換テーブルアドレス
  1024.         movea.l        CH_TRAP_ADR(a5),a3    * a3.l = 変換中のトラップアドレス
  1025.         movea.l        CH_TRAP_ROUTINE(a5),a4    * a4.l = トラップ時の処理ルーチン
  1026.  
  1027.         movea.l        CH_JMP_ADR2(a5),a6
  1028.         jmp        (a6)
  1029.  
  1030. *        キーオンの処理
  1031. AtoP_high_keyon:
  1032.         clr.b        CH_KEY_STAT(a5)        * KEY 状態リセット
  1033.  
  1034.         moveq.l        #0,d1            * d1.w = PCM予測値
  1035.         st.b        CH_ODDEVEN(a5)        * ODD/EVEN FLAG リセット
  1036.         moveq.l        #0,d4            * d4.w = 音程カウンタ下位16bit
  1037.         moveq.l        #0,d6            * d6.w = 音程カウンタ上位16bit
  1038.         movea.l        CH_TOP_ADR(a5),a0    * a0.l = ADPCM先頭アドレス
  1039.         movea.l        #AtoP_tbl,a2        * a2.l = 変換テーブル
  1040.  
  1041.         move.l        CH_LPTIME(a5),d7    * ループ処理をするか
  1042.         moveq.l        #1,d0
  1043.         cmp.l        d0,d7            * cmpi.l より4clk速い
  1044.         beq        1f
  1045.         move.l        d7,CH_LPTIME_CTR(a5)    * ループ回数カウンタ初期化
  1046.         movea.l        CH_LPSTART_ADR(a5),a3    * a3.l = ループスタートアドレス
  1047.         lea.l        AtoP_LOOP,a4        * a4.l = ループスタート処理アドレス
  1048.         move.l        a3,CH_TRAP_ADR(a5)
  1049.         move.l        a4,CH_TRAP_ROUTINE(a5)    * トラップ情報ををワークに保存
  1050.  
  1051.         movea.l        CH_JMP_ADR2(a5),a6
  1052.         jmp        (a6)
  1053.  
  1054. 1:        movea.l        CH_END_ADR(a5),a3    * a3.l = ADPCMデータ終了アドレス
  1055.         lea.l        AtoP_END,a4        * a4.l = データ終了処理アドレス
  1056.         move.l        a3,CH_TRAP_ADR(a5)
  1057.         move.l        a4,CH_TRAP_ROUTINE(a5)    * トラップ情報をワークに保存
  1058.  
  1059.         movea.l        CH_JMP_ADR2(a5),a6
  1060.         jmp        (a6)
  1061.  
  1062. *        キーオフの処理
  1063. AtoP_high_keyoff:
  1064.         clr.b        CH_KEY_STAT(a5)        * KEY 状態リセット
  1065.         clr.b        CH_PLAY_FLAG(a5)    * 演奏終了
  1066.         jmp        make_keyoff_PCM        * 消音PCM展開
  1067.  
  1068. *=======================================================
  1069.  
  1070. AtoP_high_v00:    AtoP_high_mac    0
  1071. AtoP_high_v01:    AtoP_high_mac    1
  1072. AtoP_high_v02:    AtoP_high_mac    2
  1073. AtoP_high_v03:    AtoP_high_mac    3
  1074. AtoP_high_v04:    AtoP_high_mac    4
  1075. AtoP_high_v05:    AtoP_high_mac    5
  1076. AtoP_high_v06:    AtoP_high_mac    6
  1077. AtoP_high_v07:    AtoP_high_mac    7
  1078. AtoP_high_v08:    AtoP_high_mac    8
  1079. AtoP_high_v09:    AtoP_high_mac    9
  1080. AtoP_high_v10:    AtoP_high_mac    10
  1081. AtoP_high_v11:    AtoP_high_mac    11
  1082. AtoP_high_v12:    AtoP_high_mac    12
  1083. AtoP_high_v13:    AtoP_high_mac    13
  1084. AtoP_high_v14:    AtoP_high_mac    14
  1085. AtoP_high_v15:    AtoP_high_mac    15
  1086. AtoP_high_vnn:    AtoP_high_mac    'n'
  1087. AtoP_high_non:    AtoP_high_mac    'x'
  1088.